function myNew() {
    /** 创建一个空对象，最后变成实例对象 */
    var obj = {};
    /** 返回arguments中取出的第一个参数，即构造函数Constructor */
    var Constructor = [].shift.call(arguments);
    /** 将obj的原型指向构造函数的原型 */
    obj.__proto__ = Constructor.prototype;
    /** 使用构造函数初始化obj，同时传入剩余参数 */
    var ret = Constructor.apply(obj, arguments);
    return typeof ret === 'object' && ret !== null ? ret : obj;
}

/** 构建构造函数 */
function Person(name, age){
    this.name = name;
    this.age = age;
}

var p1 = myNew1(Person, 'bob', '19');
var p2 = new Person('bbb', '19');
console.log(p1);
console.log(p2);

function myNew1() {
    var obj = {};
    const Constructor = [].shift.call(arguments);
    obj.__proto__ = Constructor.prototype;
    const ret = Constructor.apply(obj, arguments);
    return typeof ret === 'object' ? ret : obj;
}
